#include <stdio.h>
#include <unistd.h> // getpid()/fork()
#include <sys/types.h>


int main(int argc, char const *argv[])
{
    printf("main（父）进程(%d)开始执行 \n", getpid());
    int val = 123;

    // fork会根据父进程来创建子进程  （拷贝父进程的内存作为子进程的内存）
    // fork在创建子进程成功后会返回2次来向下执行， 1次是父进程执行， 1次子进程执行
    // 创建子进程
    pid_t pid = fork();
    if (pid <0)
    {
        perror("创建进程失败");
    }
    else if (pid==0) // 子进程
    {
        val++;
        printf("子进程(%d)开始执行,父进程id:%d, val=%d \n", getpid(), getppid(), val); // 124
    }
    else // 父进程
    {
        val--;
        printf("父进程(%d)又开始执行,子进程id:%d, val=%d \n\n", getpid(), pid, val); // 122
        // 等待子进程结束
        
    }

    return 0;
}
